/**
 *  本文件为统一js运行入口文件
 */

const FILES_PATH = document.currentScript.dataset.path; //文件前缀根路径
const CONFIGS_PATH = `config/index.js`; // 全局配置文件路径
const KEY_PATH = "config/securitKey.js"; //  全局密钥文件路径

var globalDatas = null; // 全局数据管理

window.onload = async function () {
    await createScriptElement({ src: KEY_PATH, name: "密钥配置文件", type: "script" }); // 引入密钥配置文件   
    await createScriptElement({ src: CONFIGS_PATH, name: "基本配置文件", type: "script" }); // 引入配置文件
    let configText = [];
    //动态加载配置文件
    for (let key in CONFIGS.PATHS) {
        for (let pathKey in CONFIGS.PATHS[key]) {
            if (CONFIGS.PATHS[key][pathKey].length) {
                for (let i = 0; i < CONFIGS.PATHS[key][pathKey].length; i++) {
                    let filesConfig = CONFIGS.PATHS[key][pathKey][i];
                    // 动态参数
                    Object.assign(filesConfig, { params: { path: FILES_PATH } });
                    await createScriptElement(filesConfig);
                    // 是否为配置中最后一个字段
                    if (filesConfig.name != "crypto") {
                        configText.push(filesConfig.name)
                    } else {
                        console.log(`%c已成功加载 ${configText}`, "color:#659F59");
                        console.log("%c所有配置环境已经加载完毕~", "color:#659F59");
                    }
                }
            }
        }
    }
    globalDatas = JSON.parse(JSON.stringify(BASEDATAS));// 深拷贝静态文件数据
    document.getElementsByTagName("title")[0].innerHTML = globalDatas.header; // 修改title
    getEleVal("version") ? getEleVal("version").innerHTML = globalDatas.datas.version : ""; // 设置版本号
    getEleVal("main").style.display = "block"; // 显示主页面
    initAccountList(); // 初始化页面状态
    onReady ? onReady() : ""; // 页面加载完回调

}


/**
 * 动态引入script文件
 * @param {Object} filesConfig 标签配置对象
 */
function createScriptElement(filesConfig) {
    return new Promise((resolve, reject) => {
        let tips;
        if (!filesConfig.src) {
            tips = `引入${filesConfig.name || filesConfig.src}失败，路径不能为空～`;
            console.log(`%c${tips}`, "color:red");
            reject(tips);
        }
        let head = document.getElementsByTagName("head").item(0);
        if (filesConfig.type == "script" || filesConfig.type == "link") {
            let labels = document.createElement(filesConfig.type); // 创建对应标签
            if (filesConfig.type == "script") {
                labels.type = "text/javascript";
                labels.src = `${filesConfig.introType ? "" : FILES_PATH}${filesConfig.src}`;
                labels.setAttribute("params", JSON.stringify(filesConfig.params));// 参数处理
            } else if (filesConfig.type == "link") {
                labels.rel = "stylesheet";
                labels.href = FILES_PATH + filesConfig.src;
            }
            head.appendChild(labels);
            labels.onload = function () {
                tips = `加载 ${filesConfig.name || filesConfig.path} 成功～`;
                resolve(tips);
            }
            labels.onerror = function () {
                tips = `加载 ${filesConfig.name || filesConfig.src} 失败～`;
                reject(tips);
            }
        } else {
            reject(`暂不支持${filesConfig.type}标签动态创建～`);
        }
    })


}

/**
 * 初始化用户数据
 */
function initAccountList() {
    let accountLists = getStorage("accountLists") || globalDatas.datas.accountLists;
    globalDatas.datas.accountLists = accountLists;
    // updataBgComponent(); // 定时更新背景
}